import toJson from'../data/toJson.js';
import runtimeType from '../sys/runtimeType.js';

/**
 * 应用永久缓存数据存取【同步方法】
 * @description 应用永久缓存数据存取，会永久保存在手机硬盘上
 * @param {String} type = [get|set|clear] 处理方式，值域解释：get-获取，set-设置，clear-清除全部
 * @param {String,Object} data 要保存的数据，要求为对象数据格式，或者是可转换为json格式的字符串
 * @return {Boolean,Object} 操作成功与否/读取到的缓存数据
 */
function varForever(type = 'get', data = {}) {
	
	// 初始化返回数据为false
	var data_return = false;
	
	// 临时变量名
	var str_name = '$focus_storage_varForever';
    
    // 获取当前运行环境
    var runType = runtimeType();
    // 如果是“非UNI”环境
    if (runType == 'nonUNI')
    {
        // 清除全部缓存
        if (type == 'clear')
        {
        	try {
        		// 清除本特例缓存
                localStorage.removeItem(str_name);
        		// 标识为"处理成功"
        		data_return = true;
        	}
        	// 标识为"处理失败"
        	catch (e) { data_return = false; }
        }
        // 设置缓存
        else if (type == 'set')
        {
        	// 转换data参数数据格式为json
        	var obj_dataCan = toJson(data);
        	// 如果转换成功
        	if (obj_dataCan)
        	{
        		// 将代码放入try，避免报错
        		try {
                    // 读取设备上的永久缓存
                    var data_storage = localStorage.getItem(str_name);
                    // 如果数据存在，那么转换为json
                    if (data_storage) { data_storage = toJson(data_storage); }
                    // 如果数据不存在，就初始化
                    else { data_storage = {}; }
        			// 合并"已经保存的数据"和"准备保存的数据"
        			var obj_together = Object.assign({}, data_storage, obj_dataCan);
        			// 特例缓存 保存api
                    localStorage.setItem(str_name, JSON.stringify(obj_together));
        			// 标识为"处理成功"
        			data_return = true;
        		}
        		// 标识为"处理失败"
        		catch (e) { data_return = false; }
        	}
        	// 否则标记为"处理失败"
        	else { data_return = false; }
        }
        // 其它默认为读取缓存
        else {
        	// 将代码放入try，避免报错
        	try {
        		// 读取设备上的永久缓存
        		var data_storage = localStorage.getItem(str_name);
        		// 数据存在，赋值到结果数据
        		if (data_storage) { data_return = toJson(data_storage); }
        		// 如果不存在，标识为"处理失败"
        		else { data_return = false; }
        	}
        	// 标识为"处理失败"
        	catch (e) { data_return = false; }
        }
    }
    // 如果是UNI环境
    else {
        // 清除全部缓存
        if (type == 'clear')
        {
        	try {
        		// 清除本特例缓存
        		uni.removeStorageSync(str_name);
        		// 标识为"处理成功"
        		data_return = true;
        	}
        	// 标识为"处理失败"
        	catch (e) { data_return = false; }
        }
        // 设置缓存
        else if (type == 'set')
        {
        	// 转换data参数数据格式为json
        	var obj_dataCan = toJson(data);
        	// 如果转换成功
        	if (obj_dataCan)
        	{
        		// 将代码放入try，避免报错
        		try {
        			// 读取设备上的永久缓存
        			var data_storage = uni.getStorageSync(str_name);
        			// 如果数据不存在，先初始化
        			if (!data_storage) { data_storage = {}; }
        			// 合并"已经保存的数据"和"准备保存的数据"
        			var obj_together = Object.assign({}, data_storage, obj_dataCan);
        			// 特例缓存 保存api
        			uni.setStorageSync(str_name, obj_together);
        			// 标识为"处理成功"
        			data_return = true;
        		}
        		// 标识为"处理失败"
        		catch (e) { data_return = false; }
        	}
        	// 否则标记为"处理失败"
        	else { data_return = false; }
        }
        // 其它默认为读取缓存
        else {
        	// 将代码放入try，避免报错
        	try {
        		// 读取设备上的永久缓存
        		var data_storage = uni.getStorageSync(str_name);
        		// 数据存在，赋值到结果数据
        		if (data_storage) { data_return = data_storage; }
        		// 如果不存在，标识为"处理失败"
        		else { data_return = false; }
        	}
        	// 标识为"处理失败"
        	catch (e) { data_return = false; }
        }
    }
	
	// 返回结果数据
	return data_return;
}

export default varForever;